package com.lekang.system.mapper;

import java.util.List;
import com.lekang.system.domain.CaregiverBedBinding;
import org.apache.ibatis.annotations.Param;

/**
 * 护理员与床位中间Mapper接口
 *
 * @author zhihao
 * @date 2025-10-15
 */
public interface CaregiverBedBindingMapper
{
    /**
     * 查询护理员与床位中间
     *
     * @param id 护理员与床位中间主键
     * @return 护理员与床位中间
     */
    public CaregiverBedBinding selectCaregiverBedBindingById(Long id);

    /**
     * 查询护理员与床位中间列表
     *
     * @param caregiverBedBinding 护理员与床位中间
     * @return 护理员与床位中间集合
     */
    public List<CaregiverBedBinding> selectCaregiverBedBindingList(CaregiverBedBinding caregiverBedBinding);

    /**
     * 新增护理员与床位中间
     *
     * @param caregiverBedBinding 护理员与床位中间
     * @return 结果
     */
    public int insertCaregiverBedBinding(CaregiverBedBinding caregiverBedBinding);

    /**
     * 修改护理员与床位中间
     *
     * @param caregiverBedBinding 护理员与床位中间
     * @return 结果
     */
    public int updateCaregiverBedBinding(CaregiverBedBinding caregiverBedBinding);

    /**
     * 删除护理员与床位中间
     *
     * @param id 护理员与床位中间主键
     * @return 结果
     */
    public int deleteCaregiverBedBindingById(Long id);

    /**
     * 批量删除护理员与床位中间
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCaregiverBedBindingByIds(Long[] ids);

    /**
     * 根据床位ID查询护理员绑定信息
     *
     * @param bedId 床位ID
     * @return 护理员绑定信息列表
     */
    public List<CaregiverBedBinding> selectByBedId(Long bedId);

    /**
     * 根据床位ID列表查询护理员绑定信息
     *
     * @param bedIds 床位ID列表
     * @return 护理员绑定信息列表
     */
    public List<CaregiverBedBinding> selectByBedIds(List<Long> bedIds);

    /**
     * 根据床位ID删除所有护理员绑定
     *
     * @param bedId 床位ID
     * @return 结果
     */
    public int deleteByBedId(Long bedId);

    /**
     * 根据床位ID和护理员ID删除绑定
     *
     * @param bedId 床位ID
     * @param caregiverId 护理员ID
     * @return 结果
     */
    public int deleteByBedIdAndCaregiverId(@Param("bedId") Long bedId, @Param("caregiverId") Long caregiverId);

    /**
     * 批量插入护理员床位绑定
     *
     * @param bindings 绑定列表
     * @return 结果
     */
    public int insertBatch(List<CaregiverBedBinding> bindings);
    
    /**
     * 根据床位ID查询护理员ID列表
     *
     * @param bedId 床位ID
     * @return 护理员ID列表
     */
    public List<Long> selectCaregiverIdsByBedId(Long bedId);
    
    /**
     * 根据老人ID查询绑定的护理员信息
     *
     * @param elderlyId 老人ID
     * @return 护理员信息列表(包含caregiver_id, user_name, nick_name)
     */
    public List<java.util.Map<String, Object>> selectCaregiversByElderlyId(Long elderlyId);
}